#include <stdio.h>

int max(int a,int b) {
    return a>b ? a : b;
}

int main() {
    int m,n;
    scanf("%d %d",&m,&n);
    int size[m],value[m];
    for(int i=0;i<m;i++) {
        scanf("%d",&size[i]);
    }
    for(int i=0;i<m;i++) {
        scanf("%d",&value[i]);
    }
    int dp[m][n+1];
    /* 初始化dp */
    for(int j=0;j<n+1;j++) {
        if(j<size[0]) dp[0][j]=0;
        else dp[0][j]=value[0];
    }
    /* 状态转移方程 */
    for(int i=1;i<m;i++) {
        for(int j=0;j<=n;j++) {
            if (j<size[i]) dp[i][j] = dp[i-1][j];
            else dp[i][j]=max(dp[i-1][j],dp[i-1][j-size[i]]+value[i]);
        }
    }
    printf("%d\n",dp[m-1][n]);
    return 0;
}
/*
	int dp[n+1];
	memset(dp,0,sizeof(dp));
    for(int i=0;i<m;i++) {
        for(int j=n;j>=size[i];j--) {
            dp[j]=max(dp[j],dp[j-size[i]]+value[i]);
        }
    }
    printf("%d\n",dp[n]);
*/